package com.ynet.middleground.mobile.approve.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ynet.middleground.approve.bean.CommentFile;
import com.ynet.middleground.mobile.approve.entity.TaskOperateStage;
import com.ynet.middleground.mobile.approve.request.CompleteTaskReq;

/**
 * <p>
 * 审批任务操作待同步暂存表 服务类
 * </p>
 *
 * @author liulx
 * @since 2021-03-26
 */
public interface TaskOperateStageService extends IService<TaskOperateStage> {

    /**
     * 根据任务 id 查询任务当前处理情况
     *
     * @param taskId 任务 id
     * @return 审批任务操作待同步暂存信息
     */
    TaskOperateStage getTaskOperateStageByTaskId(String taskId);

    /**
     * 退回任务至发起人, 仅记录操作至临时记录表
     *
     * @param processInstanceId 流程实例 id
     * @param taskId 任务 id
     * @param userId 任务操作人
     * @param reason 退回意见
     * @return 临时记录落库对象
     */
    TaskOperateStage recallBack(String processInstanceId, String taskId, Integer userId, String reason,
        List<CommentFile> commentFiles);

    /**
     * 驳回任务至发起人, 仅记录操作至临时记录表
     *
     * @param processInstanceId 流程实例 id
     * @param taskId 任务 id
     * @param userId 任务操作人
     * @param reason 退回意见
     * @return 临时记录落库对象
     */
    TaskOperateStage rejectToStartUser(String processInstanceId, String taskId, Integer userId, String reason,
        Integer type, List<CommentFile> commentFiles);

    /**
     * 提交任务服务，即将流程流转下一节点
     *
     * @param completeTaskReq 提交任务请求信息
     * @return 临时记录落库对象
     */
    TaskOperateStage complete(CompleteTaskReq completeTaskReq, Boolean isToBeSigned);

    /**
     * 根据操作记录 json 数据获取下一节点审批人
     *
     * @param operateDataJSONString 操作记录 json 数据
     * @return 下一节点审批人
     */
    String getNextAssigneeByOperateData(String operateDataJSONString);

    /**
     * 对待签章文件签章并更新回操作记录，同时执行后续流程运转等服务
     *
     * @param completeTaskReq 同意操作、提交任务请求信息（签章时上送的请求信息）
     * @param taskOperateStage 任务操作待同步暂存信息
     */
    void signAndAppendToBusinessOperate(CompleteTaskReq completeTaskReq, TaskOperateStage taskOperateStage);

}
